Groq 是一家美國的人工智慧公司,專注於硬體推論加速器的開發,近期以 LPU (Language Process Unit) 聞名。LPU 就跟 CPU 或 GPU 一樣,是一種運算裝置,但 LPU 專注在類似 LLM 這種高度密集運算的模型推論上,推論速度比目前市面上的 GPU 都快上許多。
最近 Meta 釋出了 Llama 3.1 系列模型,將 Context Window 推向 128K,除了既有的 8B 與 70B 兩種規模的模型以外,還釋出了 405B 這個超巨量參數的模型。四千億參數量的模型!如果以 FP16 來跑至少需要 810 GB 的 GPU 記憶體,用 10 張 H100 80 GB 來跑可能都不夠,這甚至還沒算上 KV Cache 等等的額外開銷。
128K Context Window 為 128 * 1024 = 131072 個 Tokens
Groq 光速上架了 Llama 3.1 的模型,雖然目前 405B 的模型也被光速下架,但還是可以來試試看 8B & 70B 模型的效果!
註冊與使用 Groq 目前是免費的,也不用綁信用卡,請各位客家免費仔趕快把握好時機入場,前往 Groq 官網首頁 就能開始體驗。使用之前推薦先設定系統提示 (System Prompt):
筆者習慣使用簡單直白的系統提示,通常只有一句話:
Reply in Traditional Chinese.
可以學 Breeze 模型多加兩句:
You are a helpful assistant. The user you are helping is from Taiwan.
不過有些模型英文的系統提示寫長了,好像就忘記要用繁體中文回覆這件事情了,所以我會多加一句:
You are a helpful assistant. Reply in Traditional Chinese. 使用繁體中文回答。
總而言之,依個人喜好調整就好!
在右上角可以選擇模型,在中間的訊息框輸入文字,或者透過語音辨識送出訊息:
就算是 70B 的模型,輸出速度高達每秒 250 Tokens,真的相當快!
Groq 也有提供 API 可以串接,目前一樣是免費的!點擊首頁底下的 GroqCloud 前往主控台:
在主控台裡面有個 Playground 可以自由調測想玩的模型與取樣參數,如果要在程式碼裡面串接 API,需要先取得一份 API Key:
接下來安裝 Groq 的 Python 套件:
pip install groq
使用方法與 OpenAI API 非常相似,首先宣告一個 Client 物件:
from groq import Groq
api_key = "gsk_xxxxxx"
client = Groq(api_key=api_key)
將訊息整理成 list of dict 的形式:
sys_msg = "You are a helpful assistant. Reply in Traditional Chinese. 使用繁體中文回答。"
usr_msg = "什麼是語言模型?"
messages = [
{"role": "system", "content": sys_msg},
{"role": "user", "content": usr_msg},
]
API Endpoint 與 OpenAI API 一模一樣:
chat_completion = client.chat.completions.create(
messages=messages,
model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)
# 語言模型(Language Model)是一種使用 ...
實際執行會發現這速度快的跟鬼一樣,我甚至懶得去寫串流輸出 🤣
可以選擇的模型列表可參考官方文件,除了 Llama 3 & 3.1 以外,還有 Gemma 2 9B 與 Mixtral 8x7B 等模型可以使用。
GroqCloud 也可以透過 OpenAI API 來呼叫,只要把 Client 宣告改成這樣:
from openai import OpenAI
base_url="https://api.groq.com/openai/v1"
client = OpenAI(api_key=api_key, base_url=base_url)
這樣就可以囉!剩下用法一如往常,一些與 OpenAI API 不相容的用法細節可以參考官方文件的描述。
有了 Groq 之後,我們免費仔已經立於不敗之地了,但客家人的實力絕對不僅於此,接下來我們要繼續蹭搜尋引擎 SerpApi 來快速打造一個 RAG 系統。首先前往 SerpApi 官網取得 API Key,一樣免費!但是要綁電話號碼,記得慎選綁定的帳號。
使用方法很簡單,首先安裝 SerpApi 的 Python 套件:
pip install serpapi
宣告一個 Client 物件:
api_key = "xxxxxx"
client = serpapi.Client(api_key=api_key)
query = "颱風 近況"
result = client.search(q=query, engine="google", location="Taiwan", hl="zh-tw", gl="tw")
print(result.as_dict())
回傳是一個 JSON 物件,內容包含的資訊相當多,可以先簡單看 organic_results
的結果就好。
結合 Groq 與 SerpApi 來快速打造一個簡單的 RAG 系統,首先請 LLM 將使用者的查詢解析成搜尋引擎用的關鍵字:
sys_inst = (
"Parse the user query into a JSON list of keyword strings, "
"which is suitable for the Google search engine. "
"For example, query: how to learn python? "
'Output: {"keywords": ["python", "learn"]}'
)
在系統提示裡面,要求語言模型將使用者查詢解析成 JSON 格式的關鍵字列表,接下來透過 JSON Mode 來取得結構化輸出,這裡以「颱風近況如何」為例:
import json
from groq import Groq
api_key = "gsk_xxxxxx"
groq_client = Groq(api_key=api_key)
user_query = "颱風近況如何?"
messages = [
{"role": "system", "content": sys_inst},
{"role": "user", "content": user_query},
]
completion = groq_client.chat.completions.create(
model="llama-3.1-70b-versatile",
messages=messages,
response_format={"type": "json_object"},
)
result = json.loads(completion.choices[0].message.content)
q = " ".join(result["keywords"])
print(f"query: {q}")
# query: 颱風 近況
得到的關鍵字為「颱風」跟「近況」,然後透過 SerpApi 取得搜尋結果,並將 organic_results
底下的 snippet
取出來,當作我們要提供給語言模型的資訊:
import serpapi
serp_client = serpapi.Client(api_key="xxx")
result = serp_client.search(q=q, engine="google", location="Taiwan", hl="zh-tw", gl="tw")
snippets = [item["snippet"] for item in result["organic_results"]]
最後將所有資訊整理起來:
sys_msg = "You are a helpful assistant. Reply in Traditional Chinese."
usr_msg = "\n\n".join(snippets)
usr_msg += f"\n\n請根據以上資訊,詳細回答使用者的問題:{user_query}"
messages = [
{"role": "system", "content": sys_msg},
{"role": "user", "content": usr_msg},
]
把完整的訊息丟進 Llama 3.1 70B 來取得最終的回答:
chat_completion = groq_client.chat.completions.create(
messages=messages,
model="llama-3.1-70b-versatile",
)
print(chat_completion.choices[0].message.content)
模型的回答如下:
根據最新資料顯示,第 3 號颱風已增強為強烈颱風,目前中心在宜蘭東南方海面,向北轉西北西移動,其暴風圈正壟罩臺灣,對臺灣各地及澎湖、馬祖、金門等地區造成影響。
這樣就完成了一份相當簡單的 RAG 系統囉!各位颱風天注意安全~
其實這些免費 API 的使用額度都滿低的,像 Groq 對 Token 使用量的限制就很高,不太能做 Long Context 的 RAG,而 SerpApi 的免費查詢次數也不是很多。但如果只是想要體驗一下 NLP 應用開發的話,就是個相當快速又方便的選擇!
《LLM 大型語言模型的絕世祕笈:27 路獨步劍法,帶你闖蕩生成式 AI 的五湖四海》改編自我參加 2023 年第 15 屆 iThome 鐵人賽 AI & Data 組冠軍系列文章《LLM 學習筆記》,介紹了許多在建立 LLM 相關應用時會使用到的技術。本書預計於 8/9 上市,現在可以在天瓏網路書局上預購,連結請參考留言區,還請大家多多支持!